// gradientwidget.cpp
#include "gradientwidget.h"
#include <QPainter>
#include <QtMath>

GradientWidget::GradientWidget(QWidget *parent)
    : QWidget(parent), m_offset(0.0)
{
    m_timer = new QTimer(this);
    connect(m_timer, &QTimer::timeout, this, &GradientWidget::updateAnimation);
    m_timer->start(50); // 每 50ms 更新一次
}

void GradientWidget::updateAnimation()
{
    // 使用正弦波实现往返（Ping-Pong）
    m_offset += 0.005;
    update(); // 触发重绘
}

void GradientWidget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::NoPen);

    // 固定：从左到右水平渐变
    QLinearGradient gradient(0, 0, width(), 0);

    // 主色调（稍深的浅色）
    QColor colorA("#d9c6f2"); // 浅紫
    QColor colorB("#a3d6f7"); // 浅蓝

    // 使用 sin 波生成 [0,1] 来回振荡的 t 值
    qreal t = 0.5 * (1 + qSin(m_offset * M_PI * 2));

    // 插值计算左右颜色
    QColor leftColor = QColor::fromRgbF(
        colorA.redF()   * (1-t) + colorB.redF()   * t,
        colorA.greenF() * (1-t) + colorB.greenF() * t,
        colorA.blueF()  * (1-t) + colorB.blueF()  * t
        );
    QColor rightColor = QColor::fromRgbF(
        colorB.redF()   * (1-t) + colorA.redF()   * t,
        colorB.greenF() * (1-t) + colorA.greenF() * t,
        colorB.blueF()  * (1-t) + colorA.blueF()  * t
        );

    gradient.setColorAt(0.0, leftColor);
    gradient.setColorAt(1.0, rightColor);

    painter.setBrush(gradient);
    painter.drawRect(rect());
    QColor overlay(255, 255, 255, 80); // 白色，30% 透明
    painter.fillRect(rect(), overlay);
}
